<!DOCTYPE html>
<title>GC while seeking</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script>
async_test(function(t)
{
    var a = document.createElement("audio");
    a.foo = "bar";
    a.src = "content/test.oga";
    a.onsuspend = t.step_func(function()
    {
        assert_equals(a.networkState, a.NETWORK_IDLE);
        a.currentTime = a.duration / 2;
        assert_true(a.seeking);
        // Continue after a timeout since the current event target is the media
        // element, which means that it cannot be garbage collected now.
        setTimeout(t.step_func(gcAndAwaitSeeked), 0);
    });
    function gcAndAwaitSeeked()
    {
        if (!a.seeking) {
            // The seek may have already completed, in which case it's too late
            // to verify GC behavior. Since networkState is NETWORK_IDLE there's
            // no way to make the seek slower, making this test inherently racy.
            t.done();
        } else {
            a.onseeked = t.step_func(function(e)
            {
                assert_greater_than(e.target.currentTime, 0);
                assert_equals(e.target.foo, "bar");
                t.done();
            });
            a = null;
            gc();
        }
    }
});
</script>
